package com.li.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test2 {
    public static void main(String[] args) throws Exception {
        //使用反射机制调用方法

        //获取类
        Class<?> clazz = Class.forName("com.li.reflect.SomeService");

        //获取方法
        //getMethod()返回某个类的所有公用（public）方法包括其继承类的公用方法，当然也包括它所实现接口的方法
        //getDeclaredMethod()对象表示的类或接口声明的所有方法,包括公共、保护、默认（包）访问和私有方法，但不包括继承的方法。当然也包括它所实现接口的方法
        Method doSome = clazz.getDeclaredMethod("doSome", String.class, int.class);

        //调用方法
        Constructor<?> constructor = clazz.getDeclaredConstructor();
        Object someService = constructor.newInstance();
        Object result = doSome.invoke(someService, "hello", 1);

        //打印返回值
        System.out.println(result);

        //someService: 哪个对象
        //doSome：哪个方法
        //”hello“, 1 ：哪些参数
        //result: 返回什么值

    }
}
